// Package purchase
// @Title purchase[简述该包的主要作用]
// @Description
// @Author  cnHuaShao
// @since v0.0.1
// @Version v1.0.0
// @Date 2024/6/19 22:38
// @Update 2024/6/19 22:38
package purchase

import (
	"FinancialManagement/src/business/common"
	"fmt"
	"github.com/shopspring/decimal"
	"time"
)

// CustomDate 自定义日期类型
type CustomDate string

// Scan 实现Scanner接口以从数据库中读取数据
func (cd *CustomDate) Scan(value interface{}) error {
	if v, ok := value.(time.Time); ok {
		*cd = CustomDate(v.Format("2006-01-02")) // 或者其他你需要的格式
		return nil
	}
	return fmt.Errorf("can't convert %v to CustomDate", value)
}

// PurchaseDetail
// @Description: 采购明细表模型
type PurchaseDetail struct {
	PurchaseID             int                  `gorm:"column:purchase_id;primaryKey;" json:"purchaseId"`               // 采购单号
	PurchaseTotalPrice     decimal.Decimal      `gorm:"column:purchase_total_price;" json:"purchaseTotalPrice"`         // 采购自动总价
	PurchaseActualAmount   decimal.Decimal      `gorm:"column:purchase_actual_amount;" json:"purchaseActualAmount"`     // 实际采购总金额
	PurchaseVehicle        string               `gorm:"column:purchase_vehicle;" json:"purchaseVehicle"`                // 采购车辆
	PurchaseDescribe       string               `gorm:"column:purchase_describe;" json:"purchaseDescribe"`              // 采购描述
	PurchaseUser           string               `gorm:"column:purchase_user;" json:"purchaseUser"`                      // 采购人
	PurchaseStatus         int                  `gorm:"column:purchase_status" json:"purchaseStatus"`                   // 采购状态，1暂存，2提交保存，3作废
	PurchasePaymentStatus  int                  `gorm:"column:purchase_payment_status" json:"purchasePaymentStatus"`    // 采购单付款状态，1未付款，2部分付款，3全部付款
	PurchaseFreight        int                  `gorm:"column:purchase_freight" json:"purchaseFreight"`                 // 运费
	PurchaseUnitCost       decimal.Decimal      `gorm:"column:purchase_unit_cost;" json:"purchaseUnitCost"`             // 采购单价（成本单价）
	PurchaseTotal          decimal.Decimal      `gorm:"column:purchase_total;" json:"purchaseTotal"`                    // 总数量，采购总斤数
	RemainSettlementAmount decimal.Decimal      `gorm:"column:remain_settlement_amount;" json:"remainSettlementAmount"` // 剩余结算总金额
	PurchaseCreateTime     int64                `gorm:"column:purchase_createtime" json:"purchaseCreateTime"`           // 采购单创建时间
	PurchaseDeparture      common.CustomDate    `gorm:"column:purchase_departuredate" json:"purchaseDeparture"`         // 采购发车日期
	Items                  []PurchaseDetailItem `gorm:"foreignKey:purchase_id" json:"items"`                            // 采购明细项
}

func (PurchaseDetail) TableName() string {
	return "purchase_detail"
}

// PurchaseDetailItem
// @Description: 采购明细子表模型
type PurchaseDetailItem struct {
	ItemID             int             `gorm:"column:item_id;primaryKey;" json:"itemId"`               // 采购明细编号
	PurchaseID         int             `gorm:"column:purchase_id" json:"purchaseId"`                   // 关联采购明细ID，指向purchase_detail表的purchase_id
	ProductID          int             `gorm:"column:product_id" json:"productId"`                     // 产品ID
	ProductName        string          `gorm:"-" json:"productName"`                                   // 产品名称
	Quantity           decimal.Decimal `gorm:"column:quantity" json:"quantity"`                        // 数量，斤数
	Price              decimal.Decimal `gorm:"column:price;" json:"price"`                             // 采购单价
	TotalPrice         decimal.Decimal `gorm:"column:total_price;" json:"totalPrice"`                  // 采购自动总价
	CustomerID         int             `gorm:"column:customer_id" json:"customerId"`                   // 关联客户ID，指向customer表的customer_id
	CustomerName       string          `gorm:"-" json:"customerName"`                                  // 客户名称
	ActualAmount       decimal.Decimal `gorm:"column:actual_amount;" json:"actualAmount"`              // 采购实际总价
	ItemDate           CustomDate      `gorm:"column:item_date;" json:"itemDate"`                      // 采购日期
	ItemType           int             `gorm:"column:item_type;" json:"itemType"`                      // 采购类型，1正常采购，2全额抵消，3部分抵消
	SettlementStatus   int             `gorm:"column:settlement_status;" json:"settlementStatus"`      // 结算状态，1已结算，2未结算，3部分结算
	SettlementAmount   decimal.Decimal `gorm:"column:settlement_amount;" json:"settlementAmount"`      // 已结算金额
	IrSettlementAmount decimal.Decimal `gorm:"column:ir_settlement_amount;" json:"irSettlementAmount"` // 剩余结算金额，自动计算
}

func (PurchaseDetailItem) TableName() string {
	return "purchase_detail_item"
}
